import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import net.didion.jwnl.JWNLException;
import rita.wordnet.*;

public class Rita {

	static String bd="ia_database";
    static String login="usuario";
    static String pass="1234";
    static String url="jdbc:mysql://localhost:3306/"+bd;
//    static ArrayList<Documento>docs=new ArrayList<Documento>();
//    static ArrayList<Cluster>clusters=new ArrayList<Cluster>();
	
	public static void main(String[] args) throws JWNLException {

		ConexionMySQL.Conectar(bd,login,pass,url);

//		RiWordnet wordnet = new RiWordnet(null);
//
//		String word = "cat";
//		String[]result = null;
//		String pos = wordnet.getBestPos(word);
//
//		int[]ids=wordnet.getSenseIds(word, pos);
//		for(int j=0;j<ids.length;j++){
//			String[]result1=wordnet.getHypernymTree(ids[j]);
//			for(int i=0;i<result1.length;i++)
//				System.out.println(result1[i]+"\n");
//		}
//		
//		Documento p=ConexionMySQL.SeleccionarPalabrasDoc(1);
//		System.out.println("Documentos "+ConexionMySQL.NumerosDocs());
//		System.out.println("Primera Palabra"+p.getWords().get(0));
//		getHiperonimos("chair");
		
		
//		clustering.clusters(ConstruirClusters());
		ConstruirClusters();

	}
	//Para cada archivo coger palabras mas comunes, para cada palabra hyperonimos, y crear con todo ello
	//el cluster (union de hiperonimos) devolver lista de clusters
	public static Set<String> getHiperonimos(String word){
		String []result = null;
		ArrayList<String> hiper = new ArrayList<String>();
		
		
		RiWordnet wordnet = new RiWordnet(null);
		String pos = wordnet.getBestPos(word);//!=null!!
		
		if(pos!=null){//Si existe la palabra en el diccionario
			int[]ids=wordnet.getSenseIds(word, pos);
			
			for(int j=0;j<ids.length;j++)
			try {
				result=wordnet.getHypernymTree(ids[j]);
				if(result!=null){
					for(int i=0;i<result.length;i++){
						if(result[i].indexOf(":")>0){
							String[]a=result[i].split(":");
							for(int k=0;k<a.length;k++)
								hiper.add(a[k]);
						}else
							hiper.add(result[i]);			
					}
				}
			} catch (JWNLException e) {
				e.printStackTrace();
			}		
		
		}
		Set myset = new HashSet(hiper);
				
		return myset;
	}
	
	//Devuelve el numero de documentos en la BD
	public static int getNDocumentos(){
		return ConexionMySQL.NumerosDocs();
	}
	
	//Devuelve los terminos mas repetidos por documento
	//ArrayList de objetos del tipo Documento
	public static ArrayList<Cluster> ConstruirClusters(){
		ArrayList<Cluster>clusters=new ArrayList<Cluster>();
		int i,d=getNDocumentos();
		ArrayList<String>palabras;
		
		Set<String>hiper = new HashSet<String>();
		
		//Se recorren todos los documentos
		for(i=1;i<=d;i++){
			//Palabras mas repetidas del doc
			palabras=ConexionMySQL.SeleccionarPalabrasDoc(i);
			
			//Busqueda de los hiperonimos de cada palabra
			for(int j=0;j<palabras.size();j++){
				hiper.addAll(getHiperonimos(palabras.get(j)));
			}
			
			//Construccion del cluster
			ArrayList<Integer>ids=new ArrayList<Integer>();
			ids.add(i);
			ArrayList<String>hiperonimos=new ArrayList<String>();
			hiperonimos.addAll(hiper);
			System.out.println("Cluster "+i+" Tamaño "+hiperonimos.size());
			clusters.add(new Cluster(ids,hiperonimos));
		}
		
//		for(int k=0;k<clusters.size();k++){
//			System.out.println(clusters.get(k).getIds() +" "+clusters.get(k).getHiperonimos());
//		}
			return clusters;
		
	}
	
	

}
